package model.uczenie.dane;

import java.text.ParseException;

import model.analityka.cechy.CechaDefinicja;
import model.analityka.cechy.ParametrTypEnum;
import model.annotation.DomainFactory;

/**
 * Fabryka NeuronWejscieDane
 * W fabryce przygotowywany jest wektor testowy (tylko wejscia)
 */
@DomainFactory
public class NeuronWejscieDaneFabryka {
	
	/**
	 * Tworzy wektor testowy na podstawie cech i etykiety.
	 * @param cechaDefinicje
	 * @param etykieta
	 * @param cechaEtykietaTyp
	 * @return
	 * @throws ParseException
	 */
	public NeuronWejscieDane stworz (
			TreningCecha[] cechy, 
			String etykieta, 
			ParametrTypEnum cechaEtykietaTyp) throws ParseException {
		double[] dane = new double[cechy.length];
		for (int i = 0; i < cechy.length; i++) {
			CechaDefinicja cechaDefinicja = cechy[i].getCechaDefinicja();
			dane[i] = cechaDefinicja.obliczWartosc(cechaEtykietaTyp, etykieta);
		}
		NeuronWejscieDane wynik = new NeuronWejscieDane(etykieta, dane);
		
		return wynik;
	}
	
	/**
	 * Tworzy wektor testowy na podstawie cech i etykiety.
	 * @param cechy
	 * @param etykietaRzeczywista
	 * @return
	 * @throws ParseException
	 */
	public NeuronWejscieDane stworz (
			TreningCecha[] cechy, 
			Object etykietaRzeczywista) {
		double[] dane = new double[cechy.length];
		for (int i = 0; i < cechy.length; i++) {
			CechaDefinicja cechaDefinicja = cechy[i].getCechaDefinicja();
			dane[i] = cechaDefinicja.obliczWartosc(etykietaRzeczywista);
		}
		NeuronWejscieDane wynik = new NeuronWejscieDane(etykietaRzeczywista.toString(), dane);
		
		return wynik;
	}
	
}
